package com.vegetable.modules.service.finance.impl;

import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.cp.bean.oa.WxCpApprovalDetailResult;
import me.chanjar.weixin.cp.bean.oa.applydata.ApplyDataContent;
import me.chanjar.weixin.cp.bean.oa.applydata.ContentValue;

import java.util.HashMap;
import java.util.Map;

/**
 * 企业微信审批收款人信息提取器
 * 用于从企业微信审批详情中提取收款人信息（收款人全称、银行账号、开户行）
 */
@Slf4j
public class WxApprovalPayeeInfoExtractor {

    /**
     * 从企业微信审批详情中提取收款人信息
     *
     * @param approvalInfo 企业微信审批详情
     * @return 包含收款人信息的Map，包含payeeName(收款人全称)、payeeBankAccount(收款人银行账号)、payeeBankName(收款人开户行)
     */
    public static Map<String, String> extractPayeeInfo(WxCpApprovalDetailResult.WxCpApprovalDetail approvalInfo) {
        Map<String, String> payeeInfo = new HashMap<>();
        String payeeName = "";
        String payeeBankAccount = "";
        String payeeBankName = "";

        try {
            // 解析审批详情中的内容，获取收款人信息
            // 注意：getApplyData()返回的是WxCpApprovalApplyData类型，而不是List<ApplyDataContent>
            me.chanjar.weixin.cp.bean.oa.WxCpApprovalApplyData applyData = approvalInfo.getApplyData();
            if (applyData != null && applyData.getContents() != null) {
                java.util.List<ApplyDataContent> contents = applyData.getContents();
                for (ApplyDataContent content : contents) {
                    if ("item-1494251166594".equals(content.getId())) {
                        // 收款人全称
                        ContentValue value = content.getValue();
                        if (value != null && value.getText() != null) {
                            payeeName = value.getText();
                        }
                    } else if ("item-1494251179316".equals(content.getId())) {
                        // 银行账号
                        ContentValue value = content.getValue();
                        if (value != null && value.getText() != null) {
                            payeeBankAccount = value.getText();
                        }
                    } else if ("item-1494251194643".equals(content.getId())) {
                        // 开户行
                        ContentValue value = content.getValue();
                        if (value != null && value.getText() != null) {
                            payeeBankName = value.getText();
                        }
                    }
                }
            }
        } catch (Exception e) {
            log.warn("解析审批详情中的收款人信息时发生异常", e);
        }

        payeeInfo.put("payeeName", payeeName);
        payeeInfo.put("payeeBankAccount", payeeBankAccount);
        payeeInfo.put("payeeBankName", payeeBankName);

        return payeeInfo;
    }
}